package com.xinqi.modules.chat.chat.friend.service;

import com.xinqi.common.base.response.PageInfo;
import com.xinqi.common.base.response.Param;
import com.xinqi.modules.chat.chat.friend.dto.req.ChatFriendApplyAutoDTO;
import com.xinqi.modules.chat.chat.friend.dto.req.ChatFriendApplyCreateDTO;
import com.xinqi.modules.chat.chat.friend.dto.req.ChatFriendApplyFindListQueryDTO;
import com.xinqi.modules.chat.chat.friend.dto.req.ChatFriendApplyQueryDTO;
import com.xinqi.modules.chat.chat.friend.dto.rsp.ChatFriendApplyResultDTO;
import com.xinqi.modules.chat.chat.friend.dto.rsp.FreindApplyResultDTO;
import com.xinqi.modules.user.user.dto.req.PhoneLinkerParamDTO;
import com.xinqi.modules.user.user.dto.req.SearchFriendDTO;
import com.xinqi.modules.user.user.dto.rsp.SearchFriendResultDTO;

import java.util.List;

/**
 * 加好友申请列表服务层
 *
 * @author: system
 * @date: 2023/01/12
 */
public interface ChatFriendApplyService {

    /**
     * 申请添加好友
     *
     * @param dto
     * @return
     */
    Long insert(ChatFriendApplyCreateDTO dto);

    /**
     * 好友申请列表
     *
     * @param pageable
     * @param query
     * @return
     */
    PageInfo<ChatFriendApplyResultDTO> findPage(Param pageable, ChatFriendApplyQueryDTO query);

    /**
     * 好友申请列表
     *
     * @param query
     * @return
     */
    FreindApplyResultDTO selectList(ChatFriendApplyFindListQueryDTO query);

    /**
     * 好友申请-详情
     *
     * @param id
     * @return
     */
    ChatFriendApplyResultDTO findById(Long id, Long operationUserId);

    /**
     * 好友申请同意/拒绝
     *
     * @param dto 同意拒绝
     * @return Boolean
     */
    Boolean autoFriend(ChatFriendApplyAutoDTO dto);

    /**
     * 好友申请未读，提醒
     *
     * @param userId 当前登录用户
     * @return 未读数量
     */
    Integer applyFriendOnRead(Long userId);

    /**
     * 当前用户未读清除
     *
     * @param userId 当前登录用户
     * @return 清除状态
     */
    Boolean applyFriendOnReadClean(Long userId);

    /**
     * 好友申请过期处理：好友申请过期时间为7天，7天后为处理的申请记录自动变更为过期
     */
    void applyFriendTimeService();

    /**
     * 搜索好友
     *
     * @param dto
     * @return
     */
     List<SearchFriendResultDTO> selectUsersByKeyword(SearchFriendDTO dto);

    /**
     * 校验好友
     *
     * @param userId
     * @param operationUserId
     * @return
     */
     Boolean friedCheck(Long userId, Long operationUserId);

    /**
     * 可能认识的人
     *
     * @param operationUserId
     * @return
     */
     List<SearchFriendResultDTO> myPotential(Long operationUserId);

    /**
     * 手机联系人
     *
     * @param dto
     * @return
     */
     List<SearchFriendResultDTO> phoneLinkerList(PhoneLinkerParamDTO dto);

    /**
     * 根据申请记录ID删除
     *
     * @param applyId
     * @return
     */
    Boolean deleteByApplyId(Long applyId);


}
